home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 001-100 / 001-025 / 014 / pdterm / menus.c < prev    next >
C/C++ Source or Header  |  1995-03-17  |  5KB  |  200 lines

  1. #include "term.h"
  2.  
  3. /* Dynamic Intuition Text functions */
  4.  
  5. struct IntuiText *NewIText(text, left, top)
  6. char *text;
  7. int left, top;
  8. {
  9.    struct IntuiText *newtext = NULL;
  10.  
  11.    newtext = (struct IntuiText *)AllocMem(sizeof(*newtext),
  12.                                           MEMF_PUBLIC | MEMF_CLEAR);
  13.    newtext->IText = (UBYTE *)text;
  14.    newtext->FrontPen = 0;
  15.    newtext->BackPen = 1;
  16.    newtext->DrawMode = JAM2;
  17.    newtext->LeftEdge = left;
  18.    newtext->TopEdge = top;
  19.    newtext->ITextFont = NULL;
  20.    newtext->NextText = NULL;
  21.  
  22.    return(newtext);
  23. }
  24.  
  25. struct IntuiText *AddIText(IText, text)
  26. struct IntuiText *IText;
  27. char *text;
  28. {
  29.    struct IntuiText *newtext = NULL;
  30.  
  31.    newtext = (struct IntuiText *)AllocMem(sizeof(*newtext),
  32.                                           MEMF_PUBLIC | MEMF_CLEAR);
  33.    newtext->IText = (UBYTE *)text;
  34.    newtext->FrontPen = IText->FrontPen;
  35.    newtext->BackPen  = IText->BackPen;
  36.    newtext->DrawMode = IText->DrawMode;
  37.    newtext->LeftEdge = IText->LeftEdge;
  38.    newtext->TopEdge  = IText->TopEdge + 11;
  39.    newtext->ITextFont = IText->ITextFont;
  40.    newtext->NextText = NULL;
  41.    IText->NextText   = newtext;
  42.  
  43.    return(newtext);
  44. }
  45.  
  46. DisposeIText(IText)
  47. struct IntuiText *IText;
  48. {
  49.    struct IntuiText *current, *next;
  50.  
  51.    current = IText;
  52.    for(next = current->NextText; current != NULL; next = next->NextText){
  53.       FreeMem(current,sizeof(*current));
  54.       current = next;
  55.    }
  56. }
  57.  
  58.  
  59. /* Dynamic Menu Constructor Functions */
  60.  
  61. #define InterMenuWidth 15
  62.  
  63. struct Menu *NewMenu(menuname, width, height)
  64. char *menuname;
  65. int width, height;
  66. {
  67.    struct Menu *menu = NULL;
  68.  
  69.    menu = (struct Menu *)AllocMem(sizeof(*menu),
  70.                                   MEMF_PUBLIC | MEMF_CLEAR);
  71.  
  72.    menu->NextMenu = NULL;
  73.    menu->LeftEdge = 0;
  74.    menu->TopEdge = 0;
  75.    menu->Width = width;
  76.    menu->Height = height;
  77.    menu->Flags = MENUENABLED;
  78.    menu->MenuName = menuname;
  79.    menu->FirstItem = NULL;
  80.  
  81.    return(menu);
  82. }
  83.  
  84. struct Menu *AddMenu(menus, MenuName, width, height)
  85. struct Menu *menus;
  86. char *MenuName;
  87. int width, height;
  88. {
  89.    struct Menu *newmenu;
  90.  
  91.    newmenu = NewMenu(MenuName, width, height);
  92.    newmenu->LeftEdge = menus->LeftEdge + menus->Width + InterMenuWidth;
  93.    menus->NextMenu = newmenu;
  94.    return(newmenu);
  95. }
  96.  
  97. struct MenuItem *NewMenuItem(name, width, height)
  98. char *name;
  99. int width, height;
  100. {
  101.    struct MenuItem *newitem = NULL;
  102.    struct IntuiText *NewIText(), *newtext = NULL;
  103.  
  104.    newitem = (struct MenuItem *)AllocMem(sizeof(*newitem),
  105.                                          MEMF_PUBLIC | MEMF_CLEAR);
  106.    newtext = NewIText(name,0,1);
  107.  
  108.    newitem->NextItem = NULL;
  109.    newitem->ItemFill = (APTR) newtext;
  110.    newitem->LeftEdge = 0;
  111.    newitem->TopEdge = 0;
  112.    newitem->Width = width;
  113.    newitem->Height = height;
  114.    newitem->Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP;
  115.    newitem->MutualExclude = 0;
  116.    newitem->SelectFill = NULL;
  117.    newitem->Command = 0;
  118.    newitem->SubItem = NULL;
  119.    newitem->NextSelect = 0;
  120.  
  121.    return(newitem);
  122. }
  123.  
  124. struct MenuItem *AddNewMenuItem(menu, name, width, height)
  125. struct Menu *menu;
  126. char *name;
  127. int width, height;
  128. {
  129.    struct MenuItem *newitem, *NewMenuItem();
  130.  
  131.    newitem = NewMenuItem(name, width, height);
  132.    menu->FirstItem = newitem;
  133.    return(newitem);
  134. }
  135.  
  136. struct MenuItem *AddItem(items, name)
  137. struct MenuItem *items;
  138. char *name;
  139. {
  140.    struct MenuItem *newitem, *NewMenuItem();
  141.  
  142.    newitem = NewMenuItem(name, items->Width, items->Height);
  143.    newitem->TopEdge = items->TopEdge + items->Height;
  144.    newitem->LeftEdge = items->LeftEdge;
  145.    items->NextItem = newitem;
  146.    return(newitem);
  147. }
  148.  
  149. struct MenuItem *AddNewSubItem(item, name, width, height)
  150. struct MenuItem *item;
  151. char *name;
  152. int width, height;
  153. {
  154.    struct MenuItem *newitem, *NewMenuItem();
  155.  
  156.    newitem = NewMenuItem(name, width, height);
  157.    item->SubItem = newitem;
  158.    newitem->LeftEdge = item->Width;
  159.    return(newitem);
  160. }
  161.  
  162. DisposeItem(item)
  163. struct MenuItem *item;
  164. {
  165.    DisposeIText((struct ItuiText *)item->ItemFill);
  166.    FreeMem(item,sizeof(*item));
  167. }
  168.  
  169. DisposeItems(items)
  170. struct MenuItem *items;
  171. {
  172.    struct MenuItem *current, *next;
  173.  
  174.    current = items;
  175.    for(next = current->NextItem; current != NULL; next = next->NextItem){
  176.       DisposeItem(current);
  177.       current = next;
  178.    }
  179. }
  180.  
  181. DisposeMenu(menu)
  182. struct Menu *menu;
  183. {
  184.    DisposeItems(menu->FirstItem);
  185.    FreeMem(menu,sizeof(*menu));
  186. }
  187.  
  188. DisposeMenus(menus)
  189. struct Menu *menus;
  190. {
  191.    struct Menu *current, *next;
  192.  
  193.    current = menus;
  194.    for(next = current->NextMenu; current != NULL; next = next->NextMenu){
  195.       DisposeMenu(current);
  196.       current = next;
  197.    }
  198. }
  199.  
  200.